home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / lib / rhythmbox / plugins / upnp_coherence / __init__.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-04-20  |  5.6 KB  |  154 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import rhythmdb
  5. import rb
  6. import gobject
  7. import gtk
  8. import coherence.extern.louie as louie
  9. from coherence import log
  10. import os.path as os
  11. import urllib
  12. import gtk.gdk as gtk
  13.  
  14. class CoherencePlugin(rb.Plugin, log.Loggable):
  15.     logCategory = 'rb_coherence_plugin'
  16.     
  17.     def __init__(self):
  18.         rb.Plugin.__init__(self)
  19.         self.coherence = None
  20.  
  21.     
  22.     def activate(self, shell):
  23.         gtk2reactor = gtk2reactor
  24.         import twisted.internet
  25.         
  26.         try:
  27.             gtk2reactor.install()
  28.         except AssertionError:
  29.             e = None
  30.             print e
  31.  
  32.         self.coherence = self.get_coherence()
  33.         if self.coherence is None:
  34.             print 'Coherence is not installed or too old, aborting'
  35.             return None
  36.         print 'coherence UPnP plugin activated'
  37.         self.shell = shell
  38.         self.sources = { }
  39.         the_icon = None
  40.         face_path = os.path.join(os.path.expanduser('~'), '.face')
  41.         if os.path.exists(face_path):
  42.             url = 'file://' + urllib.pathname2url(face_path)
  43.             
  44.             try:
  45.                 import gio
  46.                 f = gio.File(url)
  47.                 fi = f.query_info(gio.FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE)
  48.                 ctype = fi.get_attribute_string(gio.FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE)
  49.                 mimetype = gio.content_type_get_mime_type(ctype)
  50.             except:
  51.                 import gnomevfs
  52.                 mimetype = gnomevfs.get_mime_type(url)
  53.  
  54.             pixbuf = gtk.gdk.pixbuf_new_from_file(face_path)
  55.             width = '%s' % pixbuf.get_width()
  56.             height = '%s' % pixbuf.get_height()
  57.             depth = '24'
  58.             the_icon = {
  59.                 'url': url,
  60.                 'mimetype': mimetype,
  61.                 'width': width,
  62.                 'height': height,
  63.                 'depth': depth }
  64.         else:
  65.             the_icon = None
  66.         MediaServer = MediaServer
  67.         import coherence.upnp.devices.media_server
  68.         MediaStore = MediaStore
  69.         import MediaStore
  70.         if the_icon:
  71.             server = MediaServer(self.coherence, MediaStore, no_thread_needed = True, db = self.shell.props.db, plugin = self, icon = the_icon)
  72.         else:
  73.             server = MediaServer(self.coherence, MediaStore, no_thread_needed = True, db = self.shell.props.db, plugin = self)
  74.         self.uuid = str(server.uuid)
  75.         if self.coherence_version >= (0, 5, 2):
  76.             MediaRenderer = MediaRenderer
  77.             import coherence.upnp.devices.media_renderer
  78.             RhythmboxPlayer = RhythmboxPlayer
  79.             import MediaPlayer
  80.             if the_icon:
  81.                 MediaRenderer(self.coherence, RhythmboxPlayer, no_thread_needed = True, shell = self.shell, icon = the_icon)
  82.             else:
  83.                 MediaRenderer(self.coherence, RhythmboxPlayer, no_thread_needed = True, shell = self.shell)
  84.         
  85.         louie.connect(self.detected_media_server, 'Coherence.UPnP.ControlPoint.MediaServer.detected', louie.Any)
  86.         louie.connect(self.removed_media_server, 'Coherence.UPnP.ControlPoint.MediaServer.removed', louie.Any)
  87.  
  88.     
  89.     def deactivate(self, shell):
  90.         print 'coherence UPnP plugin deactivated'
  91.         if self.coherence is None:
  92.             return None
  93.         self.coherence.shutdown()
  94.         louie.disconnect(self.detected_media_server, 'Coherence.UPnP.ControlPoint.MediaServer.detected', louie.Any)
  95.         louie.disconnect(self.removed_media_server, 'Coherence.UPnP.ControlPoint.MediaServer.removed', louie.Any)
  96.         del self.shell
  97.         del self.coherence
  98.         for usn, source in self.sources.iteritems():
  99.             source.delete_thyself()
  100.         
  101.         del self.sources
  102.  
  103.     
  104.     def get_coherence(self):
  105.         coherence_instance = None
  106.         required_version = (0, 5, 7)
  107.         
  108.         try:
  109.             Coherence = Coherence
  110.             import coherence.base
  111.             __version_info__ = __version_info__
  112.             import coherence
  113.         except ImportError:
  114.             e = None
  115.             print 'Coherence not found'
  116.             return None
  117.  
  118.         if __version_info__ < required_version:
  119.             required = []([ str(i) for i in required_version ])
  120.             found = []([ str(i) for i in __version_info__ ])
  121.             print 'Coherence %s required. %s found. Please upgrade' % (required, found)
  122.             return None
  123.         self.coherence_version = __version_info__
  124.         coherence_config = {
  125.             'controlpoint': 'yes',
  126.             'plugins': { } }
  127.         coherence_instance = Coherence(coherence_config)
  128.         return coherence_instance
  129.  
  130.     
  131.     def removed_media_server(self, udn):
  132.         print 'upnp server went away %s' % udn
  133.         if self.sources.has_key(udn):
  134.             self.sources[udn].delete_thyself()
  135.             del self.sources[udn]
  136.         
  137.  
  138.     
  139.     def detected_media_server(self, client, udn):
  140.         print 'found upnp server %s (%s)' % (client.device.get_friendly_name(), udn)
  141.         self.warning('found upnp server %s (%s)' % (client.device.get_friendly_name(), udn))
  142.         if client.device.get_id() == self.uuid:
  143.             return None
  144.         db = self.shell.props.db
  145.         group = rb.rb_source_group_get_by_name('shared')
  146.         entry_type = db.entry_register_type('CoherenceUpnp:' + client.device.get_id()[5:])
  147.         UpnpSource = UpnpSource
  148.         import UpnpSource
  149.         source = gobject.new(UpnpSource, shell = self.shell, entry_type = entry_type, source_group = group, plugin = self, client = client, udn = udn)
  150.         self.sources[udn] = source
  151.         self.shell.append_source(source, None)
  152.  
  153.  
  154.